草庐IT

UIWebView 内存泄漏

全部标签

c++ - 如何在程序内存中搜索图片/png/jpeg/任何其他类型并显示?

嗯,最近我havefoundaveryinterestingarticle关于在线游戏中的MapHacks。读完后我读到他们使用内存扫描仪在内存中查找图像。他们将如何完成这样的程序,是否有免费的解决方案?如果不是,我该如何用C++编写代码?我怎么知道一段内存是“图像”?我可以将我自己的DLL加载到进程中,所以这应该不是什么大问题.. 最佳答案 回答您的问题:内存扫描器使用OSapi从另一个进程查询内存并执行模式或差异搜索。CheatEngine是一个很好的工具。文章中提到的工具通过根据内存中字节的值对像素进行着色来可视化内存。对齐仍

c++ - 是否可以强制Linux在释放后使虚拟内存失效

在Windows上,我注意到尝试取消引用指向最近释放的内存的指针会导致崩溃,并被VisualStudio困住,指出内存无效。这符合预期。但是,执行相同的应用程序和代码路径导致取消引用指向最近释放的内存的指针不会立即导致Linux崩溃。这向我表明Linux内核(或GNUC++运行时)不会很快使释放的内存失效,即使在调试版本上也是如此。该应用程序需要更长的时间才能崩溃。是这样吗?如果是这样,我可以强制更快地取消映射内存吗?如果不是,那是怎么回事? 最佳答案 你试过了吗http://valgrind.org/?它的目的是帮助追踪问题,例如

windows - Windows 中内存映射文件的命名约定

我已经搜索过这个问题的答案,但不幸的是我没有找到任何相关信息!本质上:Windows中内存映射文件的有效名称集是什么?他们可以多长时间?什么是合法字符,例如正斜杠、连字符、标点符号等是否合法?字符顺序是否有限制,例如mmf名称不能以下划线开头?编辑:我意识到这个问题的答案可能是“它们与Windows中的普通文件命名约定完全相同”。然而,重要的是要澄清这一点。 最佳答案 MemoryMappedFile.CreateNew对应于CreateFileMapping。documentationforCreateFileMapping说Th

c - OSX/iOS 上的虚拟内存与 Windows 提交/保留行为

将OSX/iOS中的虚拟内存系统行为与Windows中的虚拟内存系统行为进行比较时,我有点困惑。WindowsVirtualAlloc()相关函数及其在保留和实际内存提交和取消提交方面的行为相当简单。对于没有很好讨论的OSX,我一直在研究mach_vm_allocate()、mach_vm_map()等。例如,如果我想创建一组跨平台函数来公开Windows和OSX/iOS之间的公共(public)虚拟内存功能,我将如何管理与Windows相比,OSX上的提交/取消提交之间的区别?因为我不确定我是否理解您是否可以保留虚拟地址范围并将其作为像在Windows上一样的单独操作提交?根据我的理

c++ - 用户进程看不到服务创建的全局共享内存

我有一个Windows服务(在系统进程中运行)和一个需要共享配置结构的桌面应用程序。数据源自应用程序,但用户进程没有创建全局内存对象的权限,因此我在服务启动时使用CreateFileMapping()和基于thisanswer的DACL创建了它。.这似乎工作正常:我从CreateFileMapping()得到一个非空句柄并且GetLastError()是0。问题是应用程序看不到对象——OpenFileMapping()返回一个NULL句柄和ERROR_FILE_NOT_FOUND——如果我用WinObj手动浏览全局对象,我也看不到它。是什么让我的对象不可见?SECURITY_ATTRI

c - 使用 DnsGetCacheDataTable 时内存泄漏

以下代码显示了DNS客户端中缓存的域名。有人可以帮我找到内存泄漏时的intstat=DnsGetCacheDataTable(pEntry);行吗?PS:编译代码时请使用DNSAPI.lib。#include"stdafx.h"#include#include#include#include#includetypedefstruct_DNS_CACHE_ENTRY{struct_DNS_CACHE_ENTRY*pNext;//PointertonextentryPWSTRpszName;//DNSRecordNameunsignedshortwType;//DNSRecordTypeu

c++ - 如何在 Windows 上预留内存并将以后的映射文件放入其中?

我想保留一个内存区域,然后将映射文件连续地放入保留的内存中。映射文件之间可能存在较大的时间间隔,在此期间其他函数可能会从堆中分配内存。映射后,文件可能无法取消映射并映射到新的内存位置。在Linux上会是这样的:#include#include#include#include#includeintmain(){void*memory=mmap(nullptr,getpagesize()*2,PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE,-1,0);//reservememoryinthandle1=::open(

【c++中内存拷贝函数(C++ memcpy)详解】

原型:void*memcpy(void*dest,constvoid*src,unsignedintcount); 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。  举例: // memcpy.c             #include        #include        main()       {           char*s="Golden Global View";   chard[20];   clrscr();   memcpy(d,s,strlen(s));   d[

windows - 是否可以使用偏移指针释放内存?

假设我在内存中分配了一个包含字符串"ABCDEFG"的内存,但我只有一个指向'E'的指针。是否有可能在win32上释放该block,给定一个在block内但不在开始处的指针?任何分配方法都可以,但Heap*函数将是阻力最小的路径。如果不是native解决方案,是否有任何编写的自定义内存管理器提供此功能?编辑:这不是马虎的借口。我正在开发一个使用100%编译时元数据的自动内存管理系统。这个奇怪的要求似乎是唯一阻碍它工作的东西,即便如此,它也只需要基于数组(可切片)的数据类型。 最佳答案 运行时库中的内存分配例程可以根据每个分配bloc

windows - Windows x64 的 44 位虚拟内存地址限制的背后

http://www.alex-ionescu.com/?p=50.我看了上面的帖子。作者用单链表的例子解释了为什么Windowsx64只支持44位的虚拟内存地址。struct{//8-byteheaderULONGLONGDepth:16;ULONGLONGSequence:9;ULONGLONGNextEntry:39;}Header8;Thefirstsacrificetomakewastoreducethespaceforthesequencenumberto9bitsinsteadof16bits,reducingthemaximumsequencenumberthelist